10.5 命名规范

简介

为了保持多个项目风格统一,最好遵循一致的命名规范,但并不强求。

文件命名

文件名要全部小写,可以包含下划线_或者连字符-,C++文件最好以.cc结尾,头文件以.h结尾,专门插入文本的文件以.inc结尾。

my_default_class.cc
my-useful-class.cc
myusefulclass.cc
myusefulclass_test.cc  // 测试文件以_test结尾

类型命名

类型名称的每个单词首字母均大写,不包含下划线:

// 类和结构体
class UrlTable {};
class UrlTableTester{};
struct UrlTableProperties{};

// 类型定义
typedef hash_map<UrlTableProperties *, string> PropertiesMap;

// using别名
using PropertiesMap = hash_map<UrlTableProperties *, string>;

// 枚举
enum UrlTableErrors {};

变量命名

变量(包括函数参数)和数据成员名一律小写,单词之间用下划线链接,类的成员变量以下划线结尾,但结构体的不用。

// 普通变量
string table_name;

// 类数据成员
class TableInfo {
 private:
    string table_name_;
    static Pool<TableInfo*> pool_;
};

// 结构体变量
struct UrlTableProperties {
	string name;
    int num_entries;
    static Pool<UrlTableProperties>* pool;
};

常量命名

声明constexprconst的变量,或在程序运行期间其值始终保持不变的(静态变量或全局变量),命名时以k开头,大小写混合:

const int kDaysInAWeek = 7;

函数命名

常规函数使用大小写混合,取值和设值函数则要求与变量名匹配:

MyExcitingFunction()
MyExcitingMethod()
my_exciting_member_variable()
set_my_exciting_member_variable()

命名空间命名

命名空间以小写字母命名。

枚举命名

枚举的命名应当与常量或宏一致(推荐使用常量风格):

// 常量风格
enum UrlTableErrors {
    kOK = 0,
    kErrorOutOfMemory,
    kErrorMalformedInput,
};

// 宏风格
enum AlternateUrlTableErrors {
    OK = 0,
    OUT_OF_MEMORY = 1,
    MALFORMED_INPUT = 2,
};

宏命名

通常不应该使用宏,如果确实要使用的话,其命名要全部大写并使用下划线:

MY_MACRO_THAT_SCARES_SMALL_CHILDREN